home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Forever 4
/
Atari Forever 4.zip
/
Atari Forever 4.iso
/
PD_THEMA
/
EDITOREN
/
7UP_PD
/
SEPROTO.H
< prev
next >
Wrap
Text File
|
1998-03-14
|
15KB
|
347 lines
/* SE-Protokoll zur Kommunikation zwischen Shells zur Programmentwicklung
* und Editoren. (c) DIRK STEINS @K2.MAUS.DE
*
* Dieses Protokoll dient dazu, unter Multitasking-Systemen die Shell
* zur Compilierung und ähnlichen Sachen zu veranlassen, und um Fehler-
* meldungen und/oder Fehlerdateien an den Editor zurückzugeben.
*
* Kommandos bzw. Nachrichten von der Shell zum Editor beginnen
* mit SE_, Nachrichten vom Editor zur Shell beginnen mit ES_
*
* Da teilweise Zeiger auf Speicherbereiche übergeben werden, ist vom
* jeweiligen Absender der Nachricht darauf zu achten, daß diese
* Speicherbereiche vom Empfänger auch lesbar sind (Memory Protection!).
* Dafür sind diese als Readable zu allozieren!
*
* Version Datum Änderungen
* =====================================================================
* 0.1 10.1.94 Erster Entwurf
* 0.2 17.1.94 SE_TERMINATE hinzugefügt
*/
#define SE_INIT 0x4200
/* Die Shell fragt an, ob ein Editor das SE-Protokoll
* versteht.
* Wort 3: Ein Bitset, welche Nachrichten die Shell versendet
* Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden
* Wort 6: Unterstütze Versionsnummer des Protokolls
* Als Antwort erhält es ein ES_OK vom Editor.
*/
#define SE_OK 0x4201
/* Die Shell sagt dem Editor, das sie das Protokoll
* versteht.
* Wort 3: Ein Bitset, welche Nachrichten die Shell versendet
* Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden
* Wort 6: Unterstütze Versionsnummer des Protokolls
* Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird
*/
#define SE_ACK 0x4202
/* Die Shell bestätigt den Empfang eines Editorkommandos und gibt
* zurück, ob das Kommando ausgeführt wird.
* Wort 3: TRUE: Kommando wird verstanden und ausgeführt.
* FALSE: Das Kommando wird nicht verstanden
* Eine SE_ACK mit TRUE sagt nichts darüber aus, ob das Kommando erfolg-
* reich ausgeführt wurde. Es sagt nur, daß die Shell das Kommando
* versteht und ausführen wird!
*/
#define SE_OPEN 0x4203
/* Die Shell sagt dem Editor, daß er einen Text öffnen
* soll. Als Antwort erhält die Shell ein ES_ACK
* Wort 3+4: Ein Zeiger auf den Filenamen des zu öffnenden Files
*/
#define SE_ERROR 0x4204
/* Es ist ein Fehler beim Compilieren aufgetreten.
* Wort 3+4: Ein Zeiger auf eine Infostruktur, die wie folgt
* aufgebaut ist:
* Wort 0+1: Ein Zeiger auf den Namen des compilierten Textes.
* Wort 2+3: Ein Zeiger auf den Text der Fehlermeldung
* Wort 4 : Die Fehlernummer
* Wort 5 : Die Fehlerspalte
* Wort 6+7: Die Fehlerzeile
* Mit ES_ACK bestätigt der Editor die Meldung.
*/
#define SE_ERRFILE 0x4205
/* Es sind Fehler aufgetreten. Die Fehlermeldungen stehen in einem
* Errorfile, welches in der Message spezifiziert wird.
* Wort 3+4: Ein Zeiger auf den Filenamen des Errorfiles mit den
* Fehlermeldungen
* Wort 5+6: Ein Zeiger auf den Namen des compilierten Textes
* Mit ES_ACK bestätigt der Editor die Meldung.
*/
#define SE_PROJECT 0x4206
/* Die Shell teilt dem Editor mit, daß das Projekt
* geändert wurde. Der Filename des aktuellen
* Projektfiles wird als Parameter übergeben
* Wort 3+4: Ein Zeiger auf den Namen des Projektfiles
* Der Editor bestätigt mit ES_ACK.
* Eine vernünftige Reaktion des Editors wäre es in dem Fall,
* ebenfalls das Projekt zu wechseln, sofern er diese unterstützt.
*/
#define SE_QUIT 0x4207
/* Die Shell teilt dem Editor mit, daß sie jetzt beendet wird.
* Der Editor sollte in dem Fall die Shell als Kommunikationspartner
* vergessen.
* Parameter gibt es keine.
* Es wird keine Antwort erwartet!
*/
#define SE_TERMINATE 0x4208
/* Die Shell teilt dem Editor mit, daß dieser sich beenden soll.
* Der Editor sollte in dem Fall sich selbst beenden und seinen ganz
* normalen Terminierungsprozeß durchlaufen (und in dem auch ein
* ES_QUIT schicken!). Der Grund für so eine Meldung der Shell könnte
* zum Beispiel zu wenig Speicher zum compilieren sein.
* Mit ES_ACK bestätigt der Editor die Meldung.
*/
#define ES_INIT 0x4240
/* Ein Editor fragt an, ob eine Shell das SE-Protokoll versteht.
* Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden
* Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden
* Wort 6: Unterstütze Versionsnummer des Protokolls
* Als Antwort erhält es SE_OK von der Shell
*/
#define ES_OK 0x4241
/* Der Editor beantwortet die Anfrage der Shell nach dem Protokoll.
* Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden
* Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden
* Wort 6: Unterstütze Versionsnummer des Protokolls
* Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird
*/
#define ES_ACK 0x4242
/* Der Editor bestätigt den Empfang des Kommandos
* Wort 3: TRUE: Kommando wird verstanden und ausgeführt.
* FALSE: Das Kommando wird nicht verstanden
* Eine ES_ACK mit TRUE sagt nichts darüber aus, ob das Kommando erfolg-
* reich ausgeführt wurde. Es sagt nur, daß der Editor das Kommando
* versteht und ausführen wird!
*/
#define ES_COMPILE 0x4243
/* Der Editor sagt der Shell, daß sie ein File übersetzen soll.
* Ein Pointer auf den Dateinamen wird in der Message übergeben.
* Wort 3+4: Zeiger auf den Namen der zu compilierenden Datei.
* Diese Nachricht muß mit SE_ACK bestätigt werden.
*/
#define ES_MAKE 0x4244
/* Der Editor sagt der Shell, daß sie ein Make ausführen soll.
* Ein Filename kann in der Message übergeben werden, muß aber
* nicht gesetzt sein und muß von der Shell auch nicht beachtet
* werden!
* Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
* Die Shell bestätigt mit SE_ACK.
*/
#define ES_MAKEALL 0x4245
/* Der Editor sagt der Shell, daß ein komplettes Make All ausgeführt
* werden soll. Ein Filename für das Makefile kann (muß nicht) in
* der Message übergeben werden.
* Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
* Die Shell bestätigt mit SE_ACK.
*/
#define ES_LINK 0x4246
/* Der Editor sagt der Shell, daß das Programm
* gelinkt werden soll. Ein Filename kann
* in der Message übergeben werden, muß aber
* nicht unbedingt beachtet werden von der Shell!
* Wort 3+4: Zeiger auf den Namen der Source, die gelinkt werden soll
* (oder NULL)
* Die Shell bestätigt mit SE_ACK.
*/
#define ES_EXEC 0x4247
/* Der Editor sagt der Shell, daß das Programm
* zu der Source ausgeführt werden soll. Ein
* Filename kann übergeben werden, muß von der
* Shell aber nicht beachtet werden.
* Wort 3+4: Zeiger auf den Namen des auszuführenden Files (oder NULL)
* Bei einer Sourcedatei ist diese ggf. noch zu
* compilieren und/oder zu linken
* Die Shell bestätigt mit SE_ACK.
*/
#define ES_MAKEEXEC 0x4248
/* Die Shell soll ein Make ausführen und danach das Programm ausführen.
* Ein Filename für das Makefile kann (muß nicht) in der Message
* übergeben werden.
* Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
* Die Shell bestätigt mit SE_ACK.
*/
#define ES_PROJECT 0x4249
/* Der Editor teilt der Shell mit, daß das Project
* geändert/gewechselt wurde. Der Filename des
* Projektfiles wird als Parameter in der Message
* übergeben.
* Wort 3+4: Zeiger auf den Namen des Projektfiles
* Die Shell bestätigt mit SE_ACK.
* Eine vernünftige Reaktion der Shell wäre in dem Fall, ebenfalls
* das Projekt zu wechseln, sofern es diese unterstützt.
*/
#define ES_QUIT 0x424A
/* Der Editor teilt der Shell mit, daß er jetzt beendet wird.
* Die Shell sollte in dem Fall den Editor als Kommunikationspartner
* vergessen.
* Parameter gibt es keine.
* Es wird keine Antwort erwartet!
*/
#define SE_DATA 0
/* Nur für Typdeklaration benutzt, eigentlich überflüssig
*/
#define SEPROTOVERSION 0x0100 /* Die Versionsnummer des Protokolls.
* Highbyte ist die Major Number
* Lowbyte ist die Lower Number
*/
/* Typdefinitionen für die Nachrichten
*/
/* Dies definiert die einzelnen Bits, welche Nachrichten unterstützt werden
*/
#define seInit 0x0001
#define seOk 0x0002
#define seAck 0x0004
#define seOpen 0x0008
#define seError 0x0010
#define seErrfile 0x0020
#define seProject 0x0040
#define esInit 0x0001
#define esOk 0x0002
#define esAck 0x0004
#define esCompile 0x0008
#define esMake 0x0010
#define esMakeall 0x0020
#define esLink 0x0040
#define esExec 0x0080
#define esMakeexec 0x0100
#define esProject 0x0200
typedef struct
{
char *errfile; /* Zeiger auf den Namen der compilierten Datei */
char *errmess; /* Zeiger auf die Fehlermeldung */
WORD errnum; /* Die Fehlernummer */
WORD errcol;
LONG errline;
}ERRINFO;
/*
TYPE tShellCommands = (seInit, seOk, seAck, seOpen, seError, seErrfile,
seProject);
tEditCommands = (esInit, esOk, esAck, esCompile, esMake, esMakeall,
esLink, esExec, esMakeexec, esProject);
tPtrString = POINTER TO ARRAY [0..255] OF CHAR;
/* Zeiger auf einen nullterminierten String
*/
LONGBITSET = SET OF [0..31];
/* Leider kennt das nicht jeder Compiler
*/
tErrInfo = RECORD
errFile : tPtrString;
/* Zeiger auf den Namen der compilierten Datei
*/
errMess : tPtrString;
/* Zeiger auf die Fehlermeldung
*/
errNum : INTEGER;
/* Die Fehlernummer
*/
END;
tPtrErrInfo = POINTER TO tErrInfo;
/* Über diese Recorddefinition kann man alle
* Messages des Protokolls behandeln
*/
tMessRec = RECORD
msg : INTEGER;
/* Messagenummer, Wort 0 */
apId : INTEGER;
/* Applikation ID des Senders, Wort 1 */
overLen : INTEGER;
/* Überlänge der Nachricht (immer 0 für SE-Protokoll), Wort 2 */
CASE : CARDINAL OF
SE_INIT,
ES_INIT : shellBits: BITSET;
/* Bits, die angeben, welche Shell-Nachrichten
* unterstützt werden (Wort 3)
*/
editBits : LONGBITSET;
/* Bits, die angeben, welche Editor-Nachrichten
* unterstützt werden (Worte 4 und 5)
*/
version : CARDINAL;
/* Unterstütze Versionsnummer des Protokolls
* Aktuell: $100
*/
| SE_OK,
ES_OK : okShellBits: BITSET;
/* Bits, die angeben, welche Shell-Nachrichten
* unterstützt werden (Wort 3)
*/
okEditBits : LONGBITSET;
/* Bits, die angeben, welche Editor-Nachrichten
* unterstützt werden (Worte 4 und 5)
*/
okVersion: CARDINAL;
/* Unterstütze Versionsnummer des Antwortenden
* Aktuell: $100
*/
otherId : INTEGER;
/* Die ApId des Senders, auf das dies eine Antwort
* ist (Wort 7)
*/
| SE_ACK,
ES_ACK : acknowledge: BOOLEAN;
/* TRUE: Kommando wurde akzeptiert,
* FALSE: Kommando konnte nicht ausgeführt werden
*/
| SE_OPEN : namePtr : tPtrString;
/* Zeiger auf den Namen des zu ladenden Textes
* (Worte 3 und 4)
*/
| SE_ERROR : errorPtr : tPtrErrInfo;
/* Zeiger auf Speicherbereich, der die
* Fehlermeldung spezifiziert.
*/
errorRow : INTEGER;
/* Die Spalte, in der der Fehler aufgetreten ist
* (Wort 5)
*/
errorLine : LONGINT;
/* Die Zeile, in der der Fehler aufgetreten ist
* (Worte 6 und 7)
*/
| SE_ERRFILE : errPtr : tPtrString;
/* Zeiger auf den Namen des Errorfiles */
fnamePtr : tPtrString;
/* Zeiger auf den Namen der compilierten Datei */
| SE_PROJECT,
ES_COMPILE,
ES_MAKE,
ES_MAKEALL,
ES_LINK,
ES_EXEC,
ES_MAKEEXEC,
ES_PROJECT : filePtr : tPtrString;
/* Zeiger auf den Filenamen des Files, welches
* behandelt werden soll
*/
| SE_QUIT,
SE_TERMINATE,
ES_QUIT,
SE_DATA: data : ARRAY [0..4] OF INTEGER;
/* Definition für Maximallänge des Records
*/
END;
END;
tPtrMessRec = POINTER TO tMessRec;
/* Ein Zeiger auf diese Messageblock
*/
*/